package mediator

// Mediator 中介者接口
type Mediator interface {
	CanArrive(Train) bool
	NotifyAboutDeparture()
}

type StationManager struct {
	isPlatformFree bool    //调度，同时只能有一列火车 在车站
	trainQueue     []Train //车队
}

func NewStationManger() *StationManager {
	return &StationManager{
		isPlatformFree: true,
	}
}

func (s *StationManager) CanArrive(t Train) bool {
	if s.isPlatformFree {
		s.isPlatformFree = false
		return true
	}
	s.trainQueue = append(s.trainQueue, t)
	return false
}

func (s *StationManager) NotifyAboutDeparture() {
	if !s.isPlatformFree {
		s.isPlatformFree = true
	}
	if len(s.trainQueue) > 0 {
		firstTrainInQueue := s.trainQueue[0]
		s.trainQueue = s.trainQueue[1:]
		firstTrainInQueue.permitArrival()
	}
}
